package com.danciyixue.boot.dcyx.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.danciyixue.boot.dcyx.model.entity.TaskAssignment;
import com.danciyixue.boot.dcyx.model.entity.TaskAssignmentItem;
import com.danciyixue.boot.dcyx.model.form.TaskAssignForm;
import com.danciyixue.boot.dcyx.model.query.TaskMatrixQuery;
import com.danciyixue.boot.dcyx.model.vo.TaskItemVO;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

public interface TaskAssignmentService extends IService<TaskAssignment> {

    /**
     * 发布任务（幂等：同一学生+日期+unitId 去重）
     */
    boolean assign(TaskAssignForm form);

    /**
     * 重新计算主任务状态（pending/partial/done）
     */
    void recalcAssignmentStatus(Long assignmentId);

    /**
     * 学生今日待办任务
     */
    List<TaskItemVO> getTodayTasksForCurrentStudent();

    /**
     * 登录闸门状态：是否存在待办
     */
    boolean hasTodayPendingForCurrentStudent();

    /**
     * 刷新指定任务子项完成状态
     */
    boolean refreshItemForCurrentStudent(Long itemId);

    /**
     * 教师矩阵：按 studentId 分组，返回 date → items 的映射（7日窗口）
     */
    Map<Long, Map<LocalDate, List<TaskAssignmentItem>>> getMatrix(TaskMatrixQuery query);

    /** 编辑子项通关分数 */
    boolean updateItemPassScore(Long itemId, Integer passScore);

    /** 删除子项，并回写主任务状态 */
    boolean deleteItem(Long itemId);

    /**
     * 导出当日任务明细（当前教师作用域）
     */
    List<TaskAssignmentItem> listItemsByDate(LocalDate targetDate);
}
